home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 2108 / 2108.xpi / content / unittest.js < prev    next >
Text File  |  2008-10-19  |  1KB  |  64 lines

  1. function AssertionFailure(message) {
  2.     this.message = message;
  3. }
  4.  
  5. function assert() {
  6.     var value, comment;
  7.     if (arguments.length == 1)
  8.         value = arguments[0];
  9.     else {
  10.         comment = arguments[0];
  11.         value = arguments[1];
  12.     }
  13.     if (!value)
  14.         throw new AssertionFailure(comment);
  15. }
  16.  
  17. var theTests = [];
  18. var theAsyncs = [];
  19. for (var i in window) {
  20.     if (/test.+/.test(i)) {
  21.         theTests.push({name: i, f: window[i]});
  22.     } else if (/async.+/.test(i)) {
  23.         theAsyncs.push({name: i, f: window[i]});
  24.     }
  25. }
  26. theTests.reverse();
  27. theAsyncs.reverse();
  28.  
  29. var results = [];
  30. function runTest(test) {
  31.     try {
  32.         test.f();
  33.         results.push({test: test.name, result: "pass"});
  34.     } catch (ex) {
  35.         if (ex instanceof AssertionFailure)
  36.             results.push({test: test.name, result: "fail", message: ex.message});
  37.         else {
  38.             Components.utils.reportError(ex);
  39.             results.push({test: test.name, result: "error", message: ex});
  40.         }
  41.     }
  42. }
  43. theTests.forEach(runTest);
  44. alert("doing async!");
  45. theAsyncs.forEach(runTest);
  46.  
  47. var html = results.map(function(result) {
  48.     var bg;
  49.     switch (result.result) {
  50.         case "pass":
  51.             bg = "#0C0";
  52.             break;
  53.         case "fail":
  54.             bg = "blue";
  55.             break;
  56.         case "error":
  57.             bg = "red";
  58.             break;
  59.     }
  60.     var message = result.test + " " + (result.message || "");
  61.     return "<div style='background-color: " + bg + ";'>" + message + "</div>";
  62. }).join("\n");
  63. window.open("data:text/html," + html, "results");
  64.